package com.ylfstu.threaduse;

public class Thread01 {
    public static void main(String[] args) throws InterruptedException {

        Cat cat = new Cat();
        cat.start();//启动线程 执行Cat的run()
        /*
        (1)
        public synchronized void start() {
            start0();
        }
        (2)
        //start0() 是本地方法，是 JVM 调用, 底层是 c/c++实现
        //真正实现多线程的效果， 是 start0(), 而不是 run
        private native void start0();
        */

//        cat.run();//run方法就是一个普通的方法，没有真正的启动一个线程，就会把run()执行完毕后，才向下执行
        //说明：当main线程启动一个子线程 Thread-0，主线程不会阻塞，会继续执行
        System.out.println("主线程名 " + Thread.currentThread().getName());
        for (int i = 0; i < 60; i++) {
            System.out.println("主线程 " + i);
            Thread.sleep(1000);
        }
    }
}
//1.当一个类继承了Thread类，该类就可以当成线程使用
//2.我们会重写 run 方法 ，写上自己的业务代码
// Thread 类中的 run 也是重写了 Runnable 接口中的 run 方法
class Cat extends Thread {

    @Override
    public void run() {
        int times = 0;
        while (true) {
            System.out.println((++times) + "喵喵，我是一只小猫咪..." + Thread.currentThread().getName());
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (times == 80)
                break;
        }
    }
}